• CloudFlare Tunnelsによってインターネットアクセス可能。
  • NginxによってWebページを公開している。

以上の状態だと、/var/log/nginx/access.logに記録されるログは、全てのリクエストが127.0.0.1から来ているものとして記録される。オリジナルのIPアドレスを復元したい場合、以下の手順を実行する必要がある。

  1. nginx-cloudflare-real-ipのセットアップ

    nginx-cloudflare-real-ipはNginx用のconfigを生成してくれるスクリプトのようだ。中身を見てみたが、CloudFlareのIPアドレス一覧ページをパースしてNginxコンフィグファイルを生成する、至ってシンプルなシェルスクリプトだし、500スター程度付いているので使っても大丈夫だろう。

     $ git clone https://github.com/ergin/nginx-cloudflare-real-ip.git
     $ cd nginx-cloudflare-real-ip
     $ sudo mkdir /opt/scripts
     $ sudo cp sudo cp cloudflare-sync-ips.sh /opt/scripts/
     $ sudo chmod +x /opt/scripts/cloudflare-sync-ips.sh
    

    実行してみる。

     $ sudo /opt/scripts/cloudflare-sync-ips.sh
    

    /etc/nginx/cloudflareが追加されているはず。

  2. /etc/nginx/nginx.confの編集

    README.mdに従い、/etc/nginx/nginx.conf内のhttp{....}ブロック内に以下を追記する。

     include /etc/nginx/cloudflare;
     set_real_ip_from 127.0.0.1/32;
    
  3. cronによるIPアドレスレンジの自動更新をセットアップ

     $ sudo crontab -e
    

    以下を追記。

     # Auto sync ip addresses of Cloudflare and reload nginx
     30 2 * * * /opt/scripts/cloudflare-ip-whitelist-sync.sh >/dev/null 2>&1
    

    これでもしCloudFlareのIPアドレスのレンジが変わったとしても、自動的に追従してくれるはず。

  4. Nginxの再起動

     $ sudo systemctl restart nginx
    
  5. /var/log/nginx/access.logを見て、訪問者の実際のIPアドレスになっているか確認